#ifndef _BSP_GPIO_H_
#define _BSP_GPIO_H_
#include "imx6ul.h"
/************************************
 文件明 ： bsp_gpio.h
 作者   ： 胡秋峰
 描述   ： GPIO操作头文件
 日志   ： 添加GPIO中断相关定义2020.5.11
 ************************************/

typedef enum _gpio_pin_direction {
    kGPIO_DigitalInput  = 0U, /* 输入 */
    kGPIO_DigitalOutput = 1U, /* 输出 */
}gpio_pin_direction_t;

/* GPIO中断触发类型 */
typedef enum _gpio_interrupt_mode {
    kGPIO_NoIntmode = 0U,           /* 无中断模式 */
    kGPIO_IntLowLevel,              /* 低电平触发 */
    kGPIO_IntHightLevel,            /* 高电平触发 */
    kGPIO_IntRisingEdge,            /* 上升沿触发 */
    kGPIO_IntFallingEdge,           /* 下降沿触发 */
    kGPIO_IntRisingOrFallingEdge,   /* 跳沿触发   */
} gpio_interrupt_mode_t;

/* GPIO配置结构体 */
typedef struct _gpio_pin_config {
    gpio_pin_direction_t direction; /* GPIO方向 */
    uint8_t outputLogic;            /* 默认输出电平 如果时输出的化，默认输出低电平 */
    gpio_interrupt_mode_t mode;     /* 中断方式 */
} gpio_pin_config_t;

/* 函数声明 */
void gpio_init(GPIO_Type *base, uint32_t pin, gpio_pin_config_t *config);
int gpio_pin_read(GPIO_Type *base, uint32_t pin);
void gpio_pin_write(GPIO_Type *base, uint32_t pin, int value);
void gpio_int_config(GPIO_Type *base, uint32_t pin, gpio_interrupt_mode_t mode);
void gpio_int_enable(GPIO_Type *base, uint32_t pin);
void gpio_int_disable(GPIO_Type *base, uint32_t pin);
void gpio_clear_int_flags(GPIO_Type *base, uint32_t pin);
#endif // !_BSP_GPIO_H_